package com.itjh.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * Description: 这个类承载着我们如何对已有的业务功能进行增强的逻辑
 *
 * @Create 2025/1/21 23:43
 */

@Slf4j
@Component
//@Aspect // 表示当前类是一个切面类(AOP类)
public class TimeAspect {
    @Around("execution(* com.itjh.service.impl.*.*(..))") //切点表达式
    public Object recordTime(ProceedingJoinPoint pjp) throws Throwable {
        // 开始写增强的逻辑
        //1.记录开始时间
        long begin = System.currentTimeMillis();

        // 让原始方法执行
        //2.调用原始方法运行
        Object result = pjp.proceed();

        //3.记录结束时间，计算方法执行耗时
        long end = System.currentTimeMillis();
        log.info("{}类中的{}方法执行耗时{}毫秒", pjp.getSignature().getDeclaringTypeName(),
                pjp.getSignature().getName(), (end - begin));

        //把原始方法返回值返回
        return result;
    }
}
